local mqtt_init = {}

sys.taskInit(function()
    -- 等待网络就绪后开始MQTT初始化
    local ret, device_id = sys.waitUntil("NET_READY")
    log.info("设备ID:", device_id) -- 输出设备ID信息
    config.mqtt_client_id = device_id -- 设置MQTT客户端ID
    config.mqtt_sub_topic = "RemoteCar/" .. device_id .. "/Control" -- MQTT订阅主题
    config.mqtt_pub_topic = "RemoteCar/" .. device_id .. "/Status" -- MQTT发布主题
    -- 判断是否支持MQTT功能
    if mqtt == nil then
        while 1 do
            sys.wait(2000)
            log.error("固件出错:", "该固件不支持MQTT功能，请核实是否使用正确固件。") -- 输出错误信息
        end
    end
    -- 开始MQTT初始化
    mqttc = nil
    mqttc = mqtt.create(nil, config.mqtt_server, config.mqtt_port, config.mqtt_user, config.mqtt_pwd, config.mqtt_isssl,
        config.mqtt_isipv6) -- 创建MQTT客户端
    mqttc:debug(config.mqtt_debug) -- 开启MQTT调试日志
    mqttc:keepalive(config.mqtt_keepalive) -- 设置MQTT心跳间隔
    mqttc:auth(config.mqtt_client_id, config.mqtt_user, config.mqtt_pass, true) -- 设置MQTT认证信息
    mqttc:autoreconn(true, 3000) -- 设置MQTT自动重连，重连间隔为3秒

    mqttc:on(function(mqtt_client, event, data, payload, metas) -- 注册MQTT事件回调函数
        if event == "conack" then -- 连接MQTT服务器成功
            log.info("MQTT连接成功") -- 输出连接成功信息
            sys.publish("mqtt_connected") -- 发布MQTT连接成功消息
            mqtt_client:subscribe({
                [config.mqtt_sub_topic] = 1
            }) -- 订阅MQTT主题
            log.info("MQTT订阅主题:", config.mqtt_sub_topic) -- 输出订阅主题信息
        elseif event == "recv" then -- 收到MQTT消息
            sys.publish("mqtt_recv", payload) -- 发布MQTT收到消息消息
        elseif event == "sent" then -- 发送MQTT消息成功
            -- 处理MQTT消息用，建议将信息发布到其它任务中处理
        elseif event == "disconnect" then
            log.warn("MQTT连接断开") -- 输出连接断开信息
            -- 处理MQTT连接断开用，如未设置自动重连则需要自己处理重连过程
        else
            log.warn("MQTT事件:", event) -- 输出未知事件信息
        end
    end)
    mqttc:connect() -- 连接MQTT服务器
    sys.waitUntil("mqtt_connected") -- 等待MQTT连接成功消息
    mqttc:publish(config.mqtt_pub_topic, "I'm Online!", 1) -- 发布MQTT消息
end)

return mqtt_init